﻿using System;
using System.Collections.Generic;
using System.Text;

namespace Rarous.TexyNet.Modules
{

    /// <summary>
    /// Třída obsahující informace o konfiguraci modulu odkazů
    /// </summary>
    public class LinkModule
    {
        #region Fields
        private bool allowedLink;
        private bool allowedEmail;
        private bool allowedUrl;
        private bool allowedQuickLink;
        private bool allowedReferences;
        private string root;
        private string emailOnClick;
        private string imageOnClick;
        private string popupOnClick;
        private bool forceNoFollow;
        private IList<Reference> references;
        #endregion

        #region Constructors
        /// <summary>
        /// Konstruktor.
        /// </summary>
        public LinkModule()
        {
            this.allowedLink = true;
            this.allowedEmail = true;
            this.allowedUrl = true;
            this.allowedQuickLink = true;
            this.allowedReferences = true;
            this.root = String.Empty;
            this.emailOnClick = String.Empty;
            this.imageOnClick = String.Empty;
            this.popupOnClick = String.Empty;
            this.forceNoFollow = false;
            this.references = new List<Reference>();
        }

        /// <summary>
        /// Konstruktor.
        /// </summary>
        /// <param name="element">Element</param>
        public LinkModule(Configuration.LinkModuleElement element)
            : this()
        {
            ReadConfiguration(element);
        } 
        #endregion

        #region Private Methods
        private void ReadConfiguration(Configuration.LinkModuleElement element)
        {
            if (element == null)
            {
                return;
            }
            allowedLink = element.AllowedLink;
            allowedEmail = element.AllowedEmail;
            allowedQuickLink = element.AllowedQuickLink;
            allowedReferences = element.AllowedReferences;
            allowedUrl = element.AllowedUrl;
            emailOnClick = element.EmailOnClick;
            forceNoFollow = element.ForceNoFollow;
            imageOnClick = element.ImageOnClick;
            popupOnClick = element.PopupOnClick;
            root = element.Root;
        }
        #endregion

        #region Properties
        /// <summary>
        /// Vraci kolekci referencí.
        /// </summary>
        public IList<Reference> References
        {
            get { return references; }
        }

        /// <summary>
        /// Příznak, zda-li je povolen zápis odkazů
        /// </summary>
        public bool AllowedLink
        {
            get { return allowedLink; }
            set { allowedLink = value; }
        }

        /// <summary>
        /// Příznak, zda-li je povolen zápis e-mailových adres
        /// </summary>
        public bool AllowedEmail
        {
            get { return allowedEmail; }
            set { allowedEmail = value; }
        }

        /// <summary>
        /// Příznak, zda-li je povolen přímý zápis internetových adres
        /// </summary>
        public bool AllowedUrl
        {
            get { return allowedUrl; }
            set { allowedUrl = value; }
        }

        /// <summary>
        /// Příznak, zda-li je povolen zápis odkazů bez uvozovek
        /// </summary>
        public bool AllowedQuickLink
        {
            get { return allowedQuickLink; }
            set { allowedQuickLink = value; }
        }

        /// <summary>
        /// Příznak, zda-li jsou povoleny reference
        /// </summary>
        public bool AllowedReferences
        {
            get { return allowedReferences; }
            set { allowedReferences = value; }
        }

        /// <summary>
        /// Vrací nebo nastavuje bázovou adresu relativních odkazů
        /// </summary>
        public string Root
        {
            get { return root; }
            set { root = value; }
        }

        /// <summary>
        /// ??
        /// </summary>
        public string EmailOnClick
        {
            get { return emailOnClick; }
            set { emailOnClick = value; }
        }

        /// <summary>
        /// ??
        /// </summary>
        public string ImageOnClick
        {
            get { return imageOnClick; }
            set { imageOnClick = value; }
        }

        /// <summary>
        /// ??
        /// </summary>
        public string PopupOnClick
        {
            get { return popupOnClick; }
            set { popupOnClick = value; }
        }

        /// <summary>
        /// Příznak, zda-li mají být odkazy obohaceny o rel="nofollow", takové odkazy jsou ignorovány Googlebotem
        /// </summary>
        public bool ForceNoFollow
        {
            get { return forceNoFollow; }
            set { forceNoFollow = value; }
        } 
        #endregion
    }
}
